package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasFormExplainEntity;
import com.xbongbong.paas.domain.entity.ext.PaasFormExplainEntityExt;
import com.xbongbong.paas.toolbox.exception.XbbException;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * PAAS 表单字段描述
 *
 * @author wufeng
 * @date 2018-8-8 9:47
 */
public interface PaasFormExplainModel {

    /**
     * 插入实体
     *
     * @param entity 实体
     *
     * @return Integer MyBatis操作结果 1：成功
     */
    Integer insert(PaasFormExplainEntity entity);
    /**
     * 批量插入
     * @param formExplainList 插入信息
     * @return 返回实体列表
     */
    List<PaasFormExplainEntity> insertBatch(List<PaasFormExplainEntity> formExplainList);

    /**
     *  查询菜单列表
     * @author wufeng
     * @date 2018/8/6 16:07
     * @param entity 查询参数
     * @return java.util.List<ApplicationListVO>
     */
    List<PaasFormExplainEntity> list(Map<String, Object> entity) throws XbbException;

    /**
     * 获取表单解释
     *
     * @param entity 查询参数
     * @author GuoJun.HU
     * @since V1.0
     * @return List
     * @date 2019/2/19 10:05
     */
    @Deprecated
    List<PaasFormExplainEntityExt> findEntityExt(Map<String, Object> entity) throws XbbException;
    /**
     * 获取表单解释
     *
     * @param entity 查询参数
     * @since V1.0
     * @return List
     * @date 2019/2/19 10:05
     */
    List<PaasFormExplainEntity> findEntitys(Map<String, Object> entity) throws XbbException;
    /**
     * 获取没有处理过的表单解释
     *
     * @param entity 查询参数
     * @since V1.0
     * @return List
     * @date 2020/7/30 10:05
     */
    List<PaasFormExplainEntity> getNoHandleExplainsByFindEntitys(Map<String, Object> entity);
    /**
     *  查询列表数量
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity 查询参数
     * @return Integer
     */
    Integer getEntitysCount(Map<String, Object> entity);

    /**
     * 删除实体
     * @author wufeng
     * @date 2018/8/13 17:18
     * @return java.lang.Integer  mybatis操作结果，1：成功
     */
    Integer delete(Long key, String corpid);

    /**
     *  更新名字
     * @author wufeng
     * @date 2018/8/13 10:19
     * @param entity 实体
     * @return java.lang.Integer
     */
    Integer update(PaasFormExplainEntity entity);

    /**
     * 查询实体
     * @param key 主键
     * @param corpid 公司id
     * @return PaasFormExplainEntity
     */
    PaasFormExplainEntity getByKey(Integer key, String corpid) throws XbbException;
    /**
     * 根据菜单获取单条数据
     * @param menuId 菜单id
     * @param corpid 公司id
     * @return 实体
     */
    @Deprecated
    PaasFormExplainEntity getByMenuId(Long menuId, String corpid) throws XbbException;

    /**
     * 通过业务类型和菜单id获取表单解释
     *
     * @param businessType 业务类型
     * @param corpid    公司id
     * @param menuId    菜单id
     * @author GuoJun.HU
     * @since V1.0
     * @return PaasFormExplainEntity
     * @date 2019/2/19 10:07
     */
    PaasFormExplainEntity getByMenuIdAndBusinessType(Integer menuId, String corpid, Integer businessType) throws XbbException;

    /**
     * 根据表单获取单条数据
     * @param formId 表单id
     * @param corpid 公司id
     * @return 实体
     */
    PaasFormExplainEntity getByFormId(Long formId, String corpid) throws XbbException;

    /**
     * 根据表单id更新
     * @param formId 表单id
     * @param corpid 公司id
     * @return 实体
     */
    Integer updateByFormId(Long formId, String corpid, Integer enable);

    /**
     * 通过业务类型获取表单解释
     *
     * @param businessType 业务类型
     * @param corpid    公司id
     * @author GuoJun.HU
     * @since V1.0
     * @return PaasFormExplainEntity
     * @date 2019/2/19 10:07
     */
    PaasFormExplainEntity getByBusinessType(Integer businessType, String corpid) throws XbbException;

    PaasFormExplainEntity getByBusinessType4Distributor(Integer businessType, String corpid, Integer distributor) throws XbbException;

    /**
     * 通过业务类型获取表单解释
     *
     * @param businessType 业务类型
     * @param corpid    公司id
     * @author GuoJun.HU
     * @since V1.0
     * @return PaasFormExplainEntity
     * @date 2019/2/19 10:07
     */
    PaasFormExplainEntity getByBusinessTypeNoEnable(Integer businessType, String corpid) throws XbbException;

    /**
     * 通过业务类型获取无表单业务的默认解释
     *
     * @param businessType 业务类型
     * @author feng.zheng
     * @since V1.0
     * @return PaasFormExplainEntity
     * @date 2019/3/19 10:07
     */
    PaasFormExplainEntity getSystemDefaultExplain(Integer businessType) throws XbbException;

    List<String> getCorpidList();

    /**
     * 慎用！！！如果分库后则强制不能使用该方法！！！
     * 因为，该方法没有限制corpid（专门给资金管理改造一期使用：批量更新线上的回款单explains）
     * 批量更新表单解释：回款单的explains
     *
     * @param list 表单解释列表
     * @return java.lang.Integer
     * @author 徐俊杰
     * @date 2019/12/17 14:53
     * @since v1.0
     */
    Integer updateBatchExplains(List<PaasFormExplainEntity> list);

    /**
     * 按公司执行-该方法暂时无用
     * @param list
     * @param corpid
     * @return java.lang.Integer
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Integer updateBatchExplains(List<PaasFormExplainEntity> list, String corpid);


    List<PaasFormExplainEntity> getListForUpdateProduct(String corpid, List<Integer> businessTypeList) throws XbbException;

    PaasFormExplainEntity getOriStockForm();

    /**
     * 批量更新
     *
     * @param list
     * @param corpid
     */
    void updateBatch(List<PaasFormExplainEntity> list, String corpid);
    /**
     * 批量删除
     * @param list 主键id集合
     * @param corpid
     * @author xingxing.xiao
     */
    Integer deleteBatch(List<Long> list, String corpid);


    /**
     * 获取工作报告全部列表默认解释
     * @return
     */
    PaasFormExplainEntity getWorkReportDefaultAllListExplain() throws XbbException;

    Integer deleteBatchByMenuId(List<Long> list, String corpid);

    /**
     * 得到符合条件最大的id
     * @param map
     * @return java.lang.Long
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Long getMaxId(Map<String, Object> map);

    List<PaasFormExplainEntity> getByFormIdIn(Collection<Long> formIdIn, String corpid) throws XbbException;
}
